#include <stdio.h>
#include <stdlib.h>
#include "cai.h"

/* API认证密钥 */
const char* api_key = "sk-91c1c2c75efb4606bd51549028fb51e0";
/* API基础地址 */
const char* base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1";
/* 模型名称 */
const char* model = "qwen2.5-vl-32b-instruct";
/* 系统提示词 */
const char* prompt = "你是一个智能摄像头";
/* 保存对话历史的文件 */
const char* history_file = "history.json";

// 回调函数，用于处理流式响应
void stream_callback(void* userdata, char* content, char* reason)
{
    if (reason)
    {
        // 打印推理信息，使用淡色输出
        printf("\033[2m%s\033[0m", reason);
        fflush(stdout);
    }

    if (content)
    {
        // 打印内容信息，使用加粗输出
        printf("\033[1m%s\033[0m", content);
        fflush(stdout);
    }

    if (!reason && !content)
    {
        printf("\n");
    }
}

int main()
{
    // 创建AI助手实例
    struct cai_asst* asst = cai_asst_create(api_key, base_url, model);
    if (!asst)
    {
        fprintf(stderr, "创建客户端失败\n");
        return EXIT_FAILURE;
    }

    // 设置流式响应回调函数
    //cai_set_stream_callback(asst, stream_callback, NULL);
    cai_asst_set_format(asst, "json_object");
    cai_asst_set_temperature(asst, 0);

    // 从文件中加载历史对话
    struct cai_convo* convo = cai_convo_load(history_file);
    if (!convo)
    {
        // 如果加载失败，创建新对话
        convo = cai_convo_create(prompt, 0);
    }

    // 发送用户输入到AI助手并打印回复
    puts(cai_asst_chat(asst, convo, "图中有哪些物体，请使用以下JSON格式输出：[\"物体1\", \"物体2\"]", "../doc/eagle.png"));

    // 持久化保存对话上下文
    cai_convo_save(convo, history_file);
    
    // 销毁对话实例
    cai_convo_destroy(convo);
    // 销毁AI助手实例
    cai_asst_destroy(asst);

    return EXIT_SUCCESS;
}
